﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.Ajax.Utilities;
//import
using ddcCajamarca.BusinessLogic.Documentos.Service;
using Microsoft.Practices.Unity;
using ddcCajamarca.BusinessLogic.Documentos;
using ddcCajamarca.BusinessEntities.Documentos;
using System.Data;
using System.Web.Security;
using System.Web.Profile;


namespace ddcCajamarca.Web.Documentos
{
    public partial class frmRTDocumentario : System.Web.UI.Page
    {
        [Dependency]
        public IRDocumentoBL rdocumentoBL { get; set; }

        [Dependency]
        public IAreaBL areaBL { get; set; }

        [Dependency]
        public ITDocumentarioBL tdocumentarioBL { get; set; }

        public bool puedeFinalizar;
        public int contad = 1;

        protected void Page_Load(object sender, EventArgs e)
        {
            puedeFinalizar = User.IsInRole("Secretaría") || User.IsInRole("SuperAdmin") ? true : false;

            if (!Page.IsPostBack)
            {
                var acc = Request.QueryString["accion"];
                var id = Request.QueryString["identificador"];

                if (acc == null)
                {
                    Response.Redirect("frmListRDocumentos.aspx");
                }
                else
                {

                    hdRTDocumentario.Value = acc;

                    if (acc != null && id != null && acc == "update")
                    {
                        Int32 idRDoc = Int32.Parse(id);

                        var EditRDocumento = new RDocumento();

                        EditRDocumento = rdocumentoBL.GetFromRDocumentoById(idRDoc);

                        if (EditRDocumento.Estado == "Terminado")
                        {
                            btnGuardar.Enabled = false;
                            lblTitulo.Visible = true;
                            lbNombre.Visible = true;
                            lblDNI.Visible = true;
                            txtNombre.Visible = true;
                            txtDNI.Visible = true;

                            txtNombre.ReadOnly = true;
                            txtDNI.ReadOnly = true;

                            txtNroExpediente.ReadOnly = true;
                            txtRecurrente.ReadOnly = true;
                            txtFolios.ReadOnly = true;
                            DPLTramite.Enabled = false;
                            btnEntregado.Visible = false;
                            btnEntregado.Enabled = false;
                            btnAgregar.Enabled = false;
                            txtAsunto.ReadOnly = true;
                            txtOficio.Visible = true;
                            lblOficio.Visible = true;
                            txtOficio.ReadOnly = true;
                            btnGuardar.Enabled = false;
                            txtNombre.ReadOnly = true;
                            txtDNI.ReadOnly = true;
                            ddlArea.Enabled = false;
                            btnGuardar.Visible = false;
                            btnEntregado.Visible = false;
                        }
                        
                        if (puedeFinalizar)
                        {
                            btnEntregado.Visible = true;
                            btnGuardar.Enabled = true;
                            txtNombre.ReadOnly = false;
                            txtDNI.ReadOnly = false;
                            if (EditRDocumento.Estado == "Terminado")
                            {
                                txtNombre.ReadOnly = true;
                                txtDNI.ReadOnly = true;
                                btnGuardar.Visible = false;
                                btnEntregado.Visible = false;
                            }
                        }
                        else
                        {
                            txtNroExpediente.ReadOnly = true;
                            txtRecurrente.ReadOnly = true;
                            txtFolios.ReadOnly = true;
                            DPLTramite.Enabled = false;
                            btnEntregado.Visible = false;
                            btnAgregar.Enabled = false;
                            txtAsunto.ReadOnly = true;
                        }

                        Cache.Insert("rDocumento", EditRDocumento);

                        BindMovimiento(EditRDocumento);

                    }
                    else if (acc != null && id != null && acc == "delete")
                    {

                    }
                    else if (acc != null && acc == "nuevo")
                    {
                        var profile = HttpContext.Current.Profile;

                        var rDoc = new RDocumento();

                        BindMovimiento(rDoc);

                        Cache.Insert("rDocumento", rDoc);

                        txtFechaRegistro.Text = DateTime.Now.ToString();

                        txtUsuario.Text = profile.GetPropertyValue("appNombres").ToString();

                        btnEntregado.Visible = false;
                        txtEstado.Text = "Iniciado";

                        if (puedeFinalizar)
                        {
                            btnEntregado.Visible = true;
                        }
                    }

                }
            }

        }

        public IEnumerable<Area> GetArea()
        {
            return areaBL.getAllFromArea();
        }
        public IEnumerable<TDocumentario> GetTramite()
        {
            return tdocumentarioBL.getAllFromTramiteDocumentario();
        }

        protected void btnGuardar_Click(object sender, EventArgs e)
        {
            if (hdRTDocumentario.Value == "nuevo")
            {
                InsertRDocumento();
                Response.Redirect("frmListRDocumentos.aspx");
            }
            else if (hdRTDocumentario.Value == "update")
            {
                UpdateRDocumento();
                Response.Redirect("frmListRDocumentos.aspx");
            }
        }

        public void InsertRDocumento()
        {
            var rDoc = Cache.Get("rDocumento") as RDocumento;

            foreach (var row in lvDetalleMov.Items)
            {
                var txtNroMov = row.FindControl("txtMovimientos") as TextBox;
                var txtArea = row.FindControl("txtArea") as TextBox;
                var txtFechDerivDocum = row.FindControl("txtFechDerivDocum") as TextBox;
                var txtFechRecepDocum = row.FindControl("txtFechRecepDocum") as TextBox;
                var cbRecibido = row.FindControl("cbRecibido") as CheckBox;
                var txtObservación = row.FindControl("txtObservación") as TextBox;
                var txtEmisor = row.FindControl("txtEmisor") as TextBox;
                var txtReceptor = row.FindControl("txtReceptor") as TextBox;
                var cbAtendido = row.FindControl("cbAtendido") as CheckBox;
                var txtObservación2 = row.FindControl("txtObservación2") as TextBox;
                var txtAtiende = row.FindControl("txtAtiende") as TextBox;
                var txtFechaAten = row.FindControl("txtFechaAten") as TextBox;
                var txtObservación3 = row.FindControl("txtObservación3") as TextBox;

                rDoc.DetalleRegistros[row.DisplayIndex].Movimientos = Int32.Parse(txtNroMov.Text);
                rDoc.DetalleRegistros[row.DisplayIndex].Emisor = txtEmisor.Text;
                rDoc.DetalleRegistros[row.DisplayIndex].Receptor = txtReceptor.Text;
                rDoc.DetalleRegistros[row.DisplayIndex].FechDerivDocum = DateTime.Parse(txtFechDerivDocum.Text);
                rDoc.DetalleRegistros[row.DisplayIndex].Recibido = cbRecibido.Checked;
                rDoc.DetalleRegistros[row.DisplayIndex].FechRecepDocum = DateTime.Parse(txtFechRecepDocum.Text);
                rDoc.DetalleRegistros[row.DisplayIndex].Observacion = txtObservación.Text;
                rDoc.DetalleRegistros[row.DisplayIndex].AreaDest = txtArea.Text;
                rDoc.DetalleRegistros[row.DisplayIndex].Atendido = cbAtendido.Checked;
                rDoc.DetalleRegistros[row.DisplayIndex].Observacion2 = txtObservación2.Text;
                rDoc.DetalleRegistros[row.DisplayIndex].Atiende = txtAtiende.Text;
                rDoc.DetalleRegistros[row.DisplayIndex].FechAtenDocum = DateTime.Parse(txtFechaAten.Text);
                rDoc.DetalleRegistros[row.DisplayIndex].Observacion3 = txtObservación3.Text;
            }

            BindMovimiento(rDoc);

            Cache.Insert("organizacion", rDoc);

            rDoc.NroExpediente = txtNroExpediente.Text;
            rDoc.Fecha = DateTime.Parse(txtFechaRegistro.Text);
            rDoc.Folios = txtFolios.Text;
            rDoc.Usuario = txtUsuario.Text;
            rDoc.Asunto = txtAsunto.Text;
            rDoc.Recurrente = txtRecurrente.Text;
            rDoc.Entregado = txtNombre.Text;
            rDoc.Dni = txtDNI.Text;
            rDoc.TramiteDocumentarioId = Int32.Parse(DPLTramite.SelectedValue);
            rDoc.Estado = txtEstado.Text;
            rDoc.AreaEstado = txtAreaEstado.Text;
            rDoc.Oficio = txtOficio.Text;

            if (ModelState.IsValid)
                rdocumentoBL.AddRDocumento(rDoc);
        }

        public void UpdateRDocumento()
        {
            var rDoc = Cache.Get("rDocumento") as RDocumento;

            foreach (var row in lvDetalleMov.Items)
            {
                var txtNroMov = row.FindControl("txtMovimientos") as TextBox;
                var txtArea = row.FindControl("txtArea") as TextBox;
                var txtFechDerivDocum = row.FindControl("txtFechDerivDocum") as TextBox;
                var txtFechRecepDocum = row.FindControl("txtFechRecepDocum") as TextBox;
                var cbRecibido = row.FindControl("cbRecibido") as CheckBox;
                var txtObservación = row.FindControl("txtObservación") as TextBox;
                var txtEmisor = row.FindControl("txtEmisor") as TextBox;
                var txtReceptor = row.FindControl("txtReceptor") as TextBox;
                var cbAtendido = row.FindControl("cbAtendido") as CheckBox;
                var txtObservación2 = row.FindControl("txtObservación2") as TextBox;
                var txtAtiende = row.FindControl("txtAtiende") as TextBox;
                var txtFechaAten = row.FindControl("txtFechaAten") as TextBox;
                var txtObservación3 = row.FindControl("txtObservación3") as TextBox;

                rDoc.DetalleRegistros[row.DisplayIndex].Movimientos = Int32.Parse(txtNroMov.Text);
                rDoc.DetalleRegistros[row.DisplayIndex].Emisor = txtEmisor.Text;
                rDoc.DetalleRegistros[row.DisplayIndex].Receptor = txtReceptor.Text;
                rDoc.DetalleRegistros[row.DisplayIndex].FechDerivDocum = DateTime.Parse(txtFechDerivDocum.Text);
                rDoc.DetalleRegistros[row.DisplayIndex].Recibido = cbRecibido.Checked;
                rDoc.DetalleRegistros[row.DisplayIndex].FechRecepDocum = DateTime.Parse(txtFechRecepDocum.Text);
                rDoc.DetalleRegistros[row.DisplayIndex].Observacion = txtObservación.Text;
                rDoc.DetalleRegistros[row.DisplayIndex].AreaDest = txtArea.Text;
                rDoc.DetalleRegistros[row.DisplayIndex].Atendido = cbAtendido.Checked;
                rDoc.DetalleRegistros[row.DisplayIndex].Observacion2 = txtObservación2.Text;
                rDoc.DetalleRegistros[row.DisplayIndex].Atiende = txtAtiende.Text;
                rDoc.DetalleRegistros[row.DisplayIndex].FechAtenDocum = DateTime.Parse(txtFechaAten.Text);
                rDoc.DetalleRegistros[row.DisplayIndex].Observacion3 = txtObservación3.Text;
            }

            BindMovimiento(rDoc);

            Cache.Insert("organizacion", rDoc);

            rDoc.Id = Int32.Parse(txtIdRTDocumentario.Text);
            rDoc.NroExpediente = txtNroExpediente.Text;
            rDoc.Fecha = DateTime.Parse(txtFechaRegistro.Text);
            rDoc.Folios = txtFolios.Text;
            rDoc.Usuario = txtUsuario.Text;
            rDoc.Asunto = txtAsunto.Text;
            rDoc.Recurrente = txtRecurrente.Text;
            rDoc.Entregado = txtNombre.Text;
            rDoc.Dni = txtDNI.Text;
            rDoc.TramiteDocumentarioId = Int32.Parse(DPLTramite.SelectedValue);
            rDoc.Estado = txtEstado.Text;
            rDoc.AreaEstado = txtAreaEstado.Text;
            rDoc.Oficio = txtOficio.Text;
            
            foreach (var row in lvDetalleMov.Items)
            {
                bool cbaten = rDoc.DetalleRegistros[row.DisplayIndex].Atendido;

                bool cbrec = rDoc.DetalleRegistros[row.DisplayIndex].Recibido;

                if (cbaten)
                {

                }
                else
                {
                    rDoc.DetalleRegistros[row.DisplayIndex].FechAtenDocum = DateTime.Parse("12/12/12 12:12:12");
                }

                if (cbrec)
                {

                }
                else
                {
                    rDoc.DetalleRegistros[row.DisplayIndex].FechRecepDocum = DateTime.Parse("12/12/12 12:12:12");
                }
            }

            if (txtEstado.Text == "Terminado")
            {
                rDoc.Estado = "Terminado";
            }
            else
            {
                
            }

            if (ModelState.IsValid)
                rdocumentoBL.UpdateRDocumento(rDoc);
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            Response.Redirect("frmListRDocumentos.aspx");
        }

        protected void btnAgregar_Click(object sender, EventArgs e)
        {
            var rDoc = Cache.Get("rDocumento") as RDocumento;

            if (hdRTDocumentario.Value == "update")
            {
                BindMovimiento(rDoc);
            }

            if (puedeFinalizar)
            {

            }
            else
            {
                btnAgregar.Enabled = false;
            }

            txtEstado.Text = "Enviado a: " + ddlArea.SelectedItem;

            var areadestId = Int32.Parse(ddlArea.SelectedValue);

            var area = areaBL.getFromAreaById(areadestId);
            
            var profile = HttpContext.Current.Profile;

            var detalledoc = new DetalleRegistro()
            {
                FechDerivDocum = DateTime.Now,
                IdArea = areadestId,
                Area = area,
                Emisor = profile.GetPropertyValue("appNombres").ToString(),
                Movimientos = rDoc.DetalleRegistros.Count + 1
            };

            rDoc.DetalleRegistros.Add(detalledoc);

            BindMovimiento(rDoc);

            Cache.Insert("organizacion", detalledoc);

            if (puedeFinalizar)
            {
                foreach (var row in lvDetalleMov.Items)
                {
                    var txtObservación = row.FindControl("txtObservación") as TextBox;
                    txtObservación.ReadOnly = false;    
                }
            }
            else
            {
                foreach (var row in lvDetalleMov.Items)
                {
                    if (rDoc.DetalleRegistros.Count == contad)
                    {
                        var txtObservación = row.FindControl("txtObservación") as TextBox;
                        txtObservación.ReadOnly = false;
                    }
                    contad++;
                }
            }
        }

        protected void lvDetalleMov_ItemCommand(object sender, ListViewCommandEventArgs e)
        {
            if (e.CommandName == "btnRecib")
            {
                var rDocumentosac = Cache.Get("rDocumento") as RDocumento;

                var profile = HttpContext.Current.Profile;

                var usuario = Membership.GetUser(User.Identity.Name);

                var movi = e.CommandArgument.ToString();
                
                foreach (var row in lvDetalleMov.Items)
                {
                    var rolarea = row.FindControl("txtArea") as TextBox;

                    var cbRecibido = row.FindControl("cbRecibido") as CheckBox;

                    var txtMovimientos = row.FindControl("txtMovimientos") as TextBox;

                    if (cbRecibido.Checked)
                    {
                        
                    }
                    else
                    {
                        if (Roles.IsUserInRole(usuario.UserName, rolarea.Text) && txtMovimientos.Text == movi && rDocumentosac.Estado != "Terminado")
                        {
                            txtEstado.Text = "Recibido por: " + usuario.UserName;

                            var txtArea = row.FindControl("txtArea") as TextBox;

                            txtAreaEstado.Text = txtArea.Text;

                            cbRecibido.Checked = true;

                            var txtFechRecepDocum = row.FindControl("txtFechRecepDocum") as TextBox;

                            var txtReceptor = row.FindControl("txtReceptor") as TextBox;

                            var txtObservación22 = row.FindControl("txtObservación2") as TextBox;

                            txtObservación22.ReadOnly = false;

                            txtReceptor.Text = profile.GetPropertyValue("appNombres").ToString();

                            txtFechRecepDocum.Text = DateTime.Now.ToString();

                            btnAgregar.Enabled = true;
                        }
                    }
                }
            }
            else if (e.CommandName == "eliminarMov")
            {
                var movimientoelim = Int32.Parse(e.CommandArgument.ToString());

                var rDocumentosac = Cache.Get("rDocumento") as RDocumento;

                var profile = HttpContext.Current.Profile;

                var usuario = Membership.GetUser(User.Identity.Name);

                var movi = e.CommandArgument.ToString();

                foreach (var row in lvDetalleMov.Items)
                {
                    var cbRecibido = row.FindControl("cbRecibido") as CheckBox;

                    var txtMovimientos = row.FindControl("txtMovimientos") as TextBox;

                    if (cbRecibido.Checked)
                    {
                        
                    }
                    else
                    {
                        if (hdRTDocumentario.Value == "update")
                        {
                            if ((Roles.IsUserInRole(usuario.UserName, "Jefe de Área") || Roles.IsUserInRole(usuario.UserName, "Secretaría")) && txtMovimientos.Text == movi && rDocumentosac.Estado != "Terminado")
                            {
                                var detallemov = rDocumentosac.DetalleRegistros.SingleOrDefault(i => i.Movimientos.Equals(movimientoelim));

                                rDocumentosac.DetalleRegistros.Remove(detallemov);
                                
                                Cache.Insert("organizacion", rDocumentosac);

                                BindMovimiento(rDocumentosac);

                                btnAgregar.Enabled = true;
                            }
                            else if (txtMovimientos.Text == movi && rDocumentosac.Estado != "Terminado")
                            {
                                var detallemov = rDocumentosac.DetalleRegistros.SingleOrDefault(i => i.Movimientos.Equals(movimientoelim));

                                rDocumentosac.DetalleRegistros.Remove(detallemov);
                                
                                Cache.Insert("organizacion", rDocumentosac);

                                BindMovimiento(rDocumentosac);

                                btnAgregar.Enabled = true;
                            }
                        }
                        else
                        {
                            if (txtMovimientos.Text == movi && rDocumentosac.Estado != "Terminado")
                            {
                                var detallemov = rDocumentosac.DetalleRegistros.SingleOrDefault(i => i.Movimientos.Equals(movimientoelim));

                                rDocumentosac.DetalleRegistros.Remove(detallemov);

                                BindMovimiento(rDocumentosac);

                                Cache.Insert("organizacion", rDocumentosac);

                                btnAgregar.Enabled = true;
                            }
                        }
                        
                    }
                }
            }
            else if (e.CommandName == "btnAtend")
            {
                var rDocumentosac = Cache.Get("rDocumento") as RDocumento;

                var profile = HttpContext.Current.Profile;

                var usuario = Membership.GetUser(User.Identity.Name);

                var movi = e.CommandArgument.ToString();

                foreach (var row in lvDetalleMov.Items)
                {
                    var rolarea = row.FindControl("txtArea") as TextBox;

                    var cbAtendido = row.FindControl("cbAtendido") as CheckBox;

                    var cbRecibido = row.FindControl("cbRecibido") as CheckBox;

                    var txtMovimientos = row.FindControl("txtMovimientos") as TextBox;

                    if (cbAtendido.Checked)
                    {

                    }
                    else
                    {
                        if (cbRecibido.Checked)
                        {
                            if (Roles.IsUserInRole(usuario.UserName, rolarea.Text) && txtMovimientos.Text == movi && rDocumentosac.Estado != "Terminado")
                            {
                                txtEstado.Text = "Atendido por: " + usuario.UserName;

                                cbAtendido.Checked = true;

                                var txtArea = row.FindControl("txtArea") as TextBox;

                                txtAreaEstado.Text = txtArea.Text;

                                var txtFechaAten = row.FindControl("txtFechaAten") as TextBox;

                                var txtAtiende = row.FindControl("txtAtiende") as TextBox;

                                var txtObservación = row.FindControl("txtObservación3") as TextBox;

                                txtObservación.ReadOnly = false;

                                txtAtiende.Text = profile.GetPropertyValue("appNombres").ToString();

                                txtFechaAten.Text = DateTime.Now.ToString();

                                btnAgregar.Enabled = true;
                            }
                        }
                    }
                }
            }
        }


        private void BindMovimiento(RDocumento rDocumento)
        {
            if (IsPostBack == false && rDocumento.Id != 0)
            {
                txtIdRTDocumentario.Text = rDocumento.Id.ToString();
                txtNroExpediente.Text = rDocumento.NroExpediente;
                txtFolios.Text = rDocumento.Folios;
                txtRecurrente.Text = rDocumento.Recurrente;
                txtUsuario.Text = rDocumento.Usuario;
                txtFechaRegistro.Text = rDocumento.Fecha.ToString();
                DPLTramite.SelectedValue = rDocumento.TramiteDocumentarioId.ToString();
                txtAsunto.Text = rDocumento.Asunto;
                txtDNI.Text = rDocumento.Dni;
                txtNombre.Text = rDocumento.Entregado;
                txtEstado.Text = rDocumento.Estado;
                txtAreaEstado.Text = rDocumento.AreaEstado;
                txtOficio.Text = rDocumento.Oficio;
            }

            if (rDocumento.DetalleRegistros.Count == lvDetalleMov.Items.Count)
            {
                foreach (var row in lvDetalleMov.Items)
                {
                    var txtNroMov = row.FindControl("txtMovimientos") as TextBox;
                    var txtArea = row.FindControl("txtArea") as TextBox;
                    var txtFechDerivDocum = row.FindControl("txtFechDerivDocum") as TextBox;
                    var txtFechRecepDocum = row.FindControl("txtFechRecepDocum") as TextBox;
                    var cbRecibido = row.FindControl("cbRecibido") as CheckBox;
                    var txtObservación = row.FindControl("txtObservación") as TextBox;
                    var txtEmisor = row.FindControl("txtEmisor") as TextBox;
                    var txtReceptor = row.FindControl("txtReceptor") as TextBox;
                    var cbAtendido = row.FindControl("cbAtendido") as CheckBox;
                    var txtObservación2 = row.FindControl("txtObservación2") as TextBox;
                    var txtAtiende = row.FindControl("txtAtiende") as TextBox;
                    var txtFechaAten = row.FindControl("txtFechaAten") as TextBox;
                    var txtObservación3 = row.FindControl("txtObservación3") as TextBox;

                    rDocumento.DetalleRegistros[row.DisplayIndex].Movimientos = Int32.Parse(txtNroMov.Text);
                    rDocumento.DetalleRegistros[row.DisplayIndex].Emisor = txtEmisor.Text;
                    rDocumento.DetalleRegistros[row.DisplayIndex].Receptor = txtReceptor.Text;
                    rDocumento.DetalleRegistros[row.DisplayIndex].FechDerivDocum = DateTime.Parse(txtFechDerivDocum.Text);
                    rDocumento.DetalleRegistros[row.DisplayIndex].Recibido = cbRecibido.Checked;
                    rDocumento.DetalleRegistros[row.DisplayIndex].FechRecepDocum = DateTime.Parse(txtFechRecepDocum.Text);
                    rDocumento.DetalleRegistros[row.DisplayIndex].Observacion = txtObservación.Text;
                    rDocumento.DetalleRegistros[row.DisplayIndex].AreaDest = txtArea.Text;
                    rDocumento.DetalleRegistros[row.DisplayIndex].Atendido = cbAtendido.Checked;
                    rDocumento.DetalleRegistros[row.DisplayIndex].Observacion2 = txtObservación2.Text;
                    rDocumento.DetalleRegistros[row.DisplayIndex].Atiende = txtAtiende.Text;
                    rDocumento.DetalleRegistros[row.DisplayIndex].FechAtenDocum = DateTime.Parse(txtFechaAten.Text);
                    rDocumento.DetalleRegistros[row.DisplayIndex].Observacion3 = txtObservación3.Text;
                }
            }

            lvDetalleMov.DataSource = rDocumento.DetalleRegistros;
            lvDetalleMov.DataBind();
            }

            

        protected void btnEntregado_Click(object sender, EventArgs e)
        {
            lblTitulo.Visible = true;
            lbNombre.Visible = true;
            lblDNI.Visible = true;
            txtNombre.Visible = true;
            txtDNI.Visible = true;
            txtNombre.Text = txtRecurrente.Text;
            txtEstado.Text = "Terminado";
            lblOficio.Visible = true;
            txtOficio.Visible = true;
        }
    }


}